package Catedras;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import excepciones.MateriaYaAgregadaException;

import TemasPracticas.Trabajo_Practico;
import alumno.AlumnoEnCarrera;
public class AlumnoEnCatedra
{
  private AlumnoEnCarrera alumnoEnCarrera;
  private Catedra catedra;
  private ArrayList<Double> notas = new ArrayList<Double>();
  private double notaIntegrador;
  private int presentismo;
  private ArrayList<Trabajo_Practico> tps = new ArrayList<Trabajo_Practico>();
  public AlumnoEnCatedra(AlumnoEnCarrera unAlumnoEnCarrera, Catedra unaCatedra)
  {
    alumnoEnCarrera = unAlumnoEnCarrera;
    catedra = unaCatedra;
    notaIntegrador = 0;
  }

  public boolean isPromocionado(){
    return ((notas.size()==2)&(notas.get(0)>=7)&(notas.get(1)>=7));
  }
  
  public boolean isAprobado(){
    return (this.isPromocionado() || notaIntegrador>=4);
  }
  
  public boolean aproboParciales(){
    if(notas.size()==2){
      return notas.get(1)>=4;
    }
    else if(notas.size()==3){
      return notas.get(2)>=4;
    }
    else if(notas.size()==4){
      return notas.get(3)>=4;
    }
    else
    {
      return false;
    }
  }
  
  public void agregarTp(Trabajo_Practico tp){
    this.tps.add(tp);
  }
  
  public double promedioTps(){
    double acc=0;
    for(Trabajo_Practico t : tps){
      acc+=t.getNota();
    }
    return acc/tps.size();
  }
  
  public Trabajo_Practico getTp(Trabajo_Practico unTp){
    Trabajo_Practico  tp = null;
    for(Trabajo_Practico t : tps){
      if(t.getTitulo()==unTp.getTitulo()){
        tp = t;
      }
    }
    return tp;
  }
  
  public boolean tieneTpAprobado(Trabajo_Practico unTp){
    double nota = 0;
    for(Trabajo_Practico t : tps){
      if(t.getTitulo()==unTp.getTitulo()){
        nota = t.getNota();
      }
    }
    return nota>=4;
  }
  
  public void materiaAprobada() throws MateriaYaAgregadaException{
   if(isPromocionado()){
     double promedio = (notas.get(0)+notas.get(1))/notas.size();
     alumnoEnCarrera.agregarMateriaAprobada((int)promedio, this.catedra);
   }
   else
   {
     alumnoEnCarrera.agregarMateriaAprobada((int)this.notaIntegrador, this.catedra);
   }
 }
  
  public void materiaDesaprobada() throws MateriaYaAgregadaException{
    alumnoEnCarrera.agregarAplazo((int)this.notaIntegrador, this.catedra);
  }
  
  //GETTER AND SETTER
  public AlumnoEnCarrera getAlumnoEnCarrera(){
    return alumnoEnCarrera;
  }
  public int getPresentismo(){
    return presentismo;
  }
  public void setPresentismo(int presentes){
    presentismo = presentes;
  }
  public void setUnAusente(){
    presentismo++;
  }
  public void setNota(double nota){
    notas.add(nota);    
  }
public Catedra getCatedra() {
	return catedra;
}
public void setCatedra(Catedra catedra) {
	this.catedra = catedra;
}
public ArrayList<Double> getNotas() {
	return notas;
}
public void setNotas(ArrayList<Double> notas) {
	this.notas = notas;
}
public double getNotaIntegrador() {
	return notaIntegrador;
}
public void setNotaIntegrador(double notaIntegrador) {
	this.notaIntegrador = notaIntegrador;
}

}
